今天的題目是本來的 No.237 (https://leetcode.com/problems/delete-node-in-a-linked-list/),把 Linked List 中某個 Node 刪除掉。
基本上一般人看到這題應該會想說這題也太廢了吧!大概是 Linked List 的 Hello World 等級題目,不過不過,還是有一點點有趣的~
一般刪除 Linked List 中某個節點,可能會給你 Head,然後要你找到某個 Node 的 Value 是符合的並刪除,那麼我們就是從 Head 一路找到該 Node,並且把該 Node 的前一個 Node 的 Next 指向該 Node 的 Next。然而這題只給你要刪除的 Node 並沒有給你 Head,而且又是 Singly (如果是 Doubly 還可以透過 prev 來得知前一個 Node),該怎麼辦?其實只要稍微動動腦三秒鐘也是可以想出來的。
讓我們來看 Code,思路上就是讓這個要被刪除的 node
去抓交替,抓的是誰呢?就是 node.next
。把 node.next
的 Value (node.next.val
) 變到自己身上 (node.val
),然後 node.next
指向 node.next.next
,就這樣無聲無息地把下一個 Node 給幹掉了,嘿嘿!(所以其實剉咧等的是 node.next
而不是 node
lol)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val, node.next = node.next.val, node.next.next
See YA!
歡迎追蹤我的 Medium 囉!
https://medium.com/@ryanyang1221